/**
 * asyncToGenerator 方法的实现步骤如下：
 * 1. 接收一个 generatorFunc 函数作为参数。
 * 2. 在函数内部，调用 generatorFunc 函数，得到一个迭代器对象 gen。
 * 3. 调用 gen.next() 方法，得到一个 Promise 对象 result。
 * 4. 使用 await 等待 result Promise 对象的状态变为 fulfilled，并将其解析为一个值 result.value。
 * 5. 判断 result.done 是否为 true，如果是，则返回 result.value。
 * 6. 如果 result.done 不为 true，则调用 gen.next(await result.value) 方法，得到下一个 Promise 对象 result，并重复步骤 4-5。
 * 7. 如果在执行步骤 4-6 的过程中出现了错误，则抛出该错误。
 * 8. 如果 gen.next() 方法返回的 Promise 对象的状态变为 fulfilled，则返回该 Promise 对象的值。
*/

async function asyncToGenerator(generatorFunc) {
    // 1. 接收一个 generatorFunc 函数作为参数。
    // 2. 在函数内部，调用 generatorFunc 函数，得到一个迭代器对象 gen。
    try {
      const gen = generatorFunc();
      let result = await gen.next();
      // 3. 调用 gen.next() 方法，得到一个 Promise 对象 result。
      // 4. 使用 await 等待 result Promise 对象的状态变为 fulfilled，并将其解析为一个值 result.value。
      while (!result.done) {
        // 5. 判断 result.done 是否为 true，如果是，则返回 result.value。
        // 6. 如果 result.done 不为 true，则调用 gen.next(await result.value) 方法，得到下一个 Promise 对象 result，并重复步骤 4-5。
        result = await gen.next(await result.value);
      }
      return result.value;
    } catch (error) {
      // 7. 如果在执行步骤 4-6 的过程中出现了错误，则抛出该错误。
      throw error;
    }
  }
  
  const asyncFunc = asyncToGenerator(async function () {
    const result1 = await Promise.resolve(1);
    console.log(result1);
    const result2 = await Promise.resolve(2);
    console.log(result2);
  });
  
  asyncFunc().then(() => {
    console.log('done');
  });
  // 8. 如果 gen.next() 方法返回的 Promise 对象的状态变为 fulfilled，则返回该 Promise 对象的值。